package com.alioth;

/**
 * @Author tsj
 * @Date 2023/11/21/16:46
 *
 * 何为线程安全
 *          如果只有一个线程才可以操作此数据，则必是线程安全的
 *          如果有多个线程操作此数据，则此数据是共享数据。如果不考虑同步机制，会出现线程安全的问题
 */
public class StringBuilderTest {

    // s1的声明方式 是线程安全的
    public static void method1(){
        // 线程不安全的
        StringBuilder s1 = new StringBuilder();
        s1.append("a");
        s1.append("b");
    }

    // builder的操作过程，是线程不安全的
    public static void method2(StringBuilder builder){

        builder.append("a");
        builder.append("b");
    }

    // sBuilder 是线程不安全的
    public static StringBuilder method3(){
        StringBuilder sBuilder = new StringBuilder();
        sBuilder.append("a");
        sBuilder.append("b");
        return sBuilder;
    }


    // 线程安全的
    public static String method4(){
        StringBuilder sBuilder = new StringBuilder();
        sBuilder.append("a");
        sBuilder.append("b");
        return sBuilder.toString();
    }

    public static void main(String[] args) {

        StringBuilder builder = new StringBuilder();

        new Thread(()->{
            builder.append("a");
            builder.append("b");
        }).start();

        method2(builder);


    }
}
